package com.cskaoyan.javase.oop3.interface2.basic2.impl;

import com.cskaoyan.javase.oop3.interface2.basic2.ITest;
import com.cskaoyan.javase.oop3.interface2.basic2.ITest2;
import com.cskaoyan.javase.oop3.interface2.basic2.ITest3;
import com.cskaoyan.javase.oop3.interface2.introduction1.Demo;

/**
 * @description: ITest接口实现类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * > 接口的子类特征：
 *
 * - 如果是一个普通类实现了接口
 *   - 必须要重写接口中所有的抽象方法，除非该类是一个抽象类
 *   - 一个类实现了接口，就变成了接口的子类 可以用多态
 *   - 接口可以多实现，配合default方法可以实现真正意义上的多继承（最好不要这么干）
 *   - 如果一个类又继承类又实现接口，一定是先继承再实现，顺序不能互换
 *
 * - 如果是一个抽象类实现了接口
 *   - 可以不重写接口中的抽象方法
 *   - 可以实现多个接口而不重写方法
 *   - 抽象类也可以继承普通类
 *
 * - 如果一个接口继承了接口 extends
 *   - 接口之间不能互相实现，但是可以继承
 *   - 接口可以多继承
 *   但是接口之间继承很少见，几乎没有，知道有这回事就行
 *
 *
 */
public class ITestImpl implements ITest {
    public static void main(String[] args) {
        //访问接口中的静态全局常量
       /* System.out.println(ITest.name);

        //用子类去调用接口中的default方法
        ITestImpl iTest = new ITestImpl();
        iTest.testDefaultMethod();

        ITest.testStaticMethod();
        //Static method may be invoked on containing interface class only
        //ITestImpl.testStaticMethod();*/

        //多态调用
        ITest it = new ITestImpl();
        it.test();
    }

    @Override
    public void test() {
        System.out.println("实现ITest接口中的抽象方法");
    }

    @Override
    public void test2() {

    }

    @Override
    public void test3() {

    }

    @Override
    public void test4() {

    }

    //@Override
    //public void test5() {
    //
    //}
}

abstract class Test2 extends Demo implements ITest, ITest2, ITest3 {}

interface I extends ITest2,ITest3,ITest{

}

